import { Dialect } from "sequelize";
import { Sequelize } from "sequelize-typescript";
import dbConfig from "../conf/DbConfig";
import path from "path";
// 满足两种模型
class BaseDao {
  static baseDao: BaseDao = new BaseDao();
  sequelize!: Sequelize;

  constructor() {
    this.initSeqConf("mysql");
  }
  //创建sequelize来连接数据库
  initSeqConf(dialect: Dialect) {
    let { host, user, password, database, port } = dbConfig.getConf();
    this.sequelize = new Sequelize(database, user, password, {
      host, //数据库地址
      port,
      dialect, // 数据库类型 方言
      define: { timestamps: false, freezeTableName: true },
      //连接数据池设置  sequelize会默认使用连接数据池
      pool: {
        max: 100, //最大连接数
        min: 5, //最小连接数
        //idle 这个属性控制连接池中空闲连接最大时间空闲时间，单位毫秒。只有当连接池中连接数量大于最小连接数时候生效
        idle: 10000, // 空闲连接最长时间
        acquire: 10000, // 表示一条sql查询获取连接资源之前的最长等待时间，单位秒
      },
    });
    // this.addModels();
  }
  // 加入模型目录下所有的目录 加载sequelize第三种模型
  addModels() {
    //拿到 ormmodel目录下所有文件
    const modelPath = path.join(process.cwd(), "/src/modules/decormodel");
    // 模型目录sequelize
    this.sequelize.addModels([modelPath]);
  }
}
const baseDao = BaseDao.baseDao;
baseDao.addModels();
export const { sequelize } = baseDao;
